﻿using System;
using System.Collections;

[Serializable]

public class ColDatosDeUsuarios : ColEncapsulados
{
    #region Constructor

    /**
        * \brief Constructor de ColDatosDeUsuario.
        * \return La ColDatosDeUsuario creado.
        */
	public ColDatosDeUsuarios() : base ()
    {
        //Sin código
    }
        
    /**
        * \brief Constructor de copia de ColDatosDeUsuarios.
        * \param pColDatosDeUsuarios ColDatosDeUsuarios sobre el que realizar la copia
        * \return ColDatosDeUsuarios creado y listo para usar.
        */
    protected ColDatosDeUsuarios(ColDatosDeUsuarios pColDatosDeUsuarios)
    {
        foreach (DatosDeUsuario datos in pColDatosDeUsuarios)
            this.añadir((DatosDeUsuario)datos.dameCopiaEncapsulado());
    }

    #endregion

    #region Métodos de Operación

    /**
    * \brief Función que comprueba si una entidad esta dentro de una colección.
    * \param pElemento - entidad que se va a comprobar si se encuentra dentro de una colección.
    * \return TRUE si el elemento pertenece a la colección y FALSE si el elemento no pertenece a la colección.
    */
    public bool existe(DatosDeUsuario pElemento)
    {
        return base.existe(pElemento);
    }
    /**
        * \brief Función que añade una entidad a una colección.
        * \param pElemento - entidad que se va a añadir.
        */
    public void añadir(DatosDeUsuario pElemento)
    {
        base.añadir(pElemento);
    }
    /**
        * \brief Función que elimina una entidad que esta dentro de una colección
        * \param pElemento - entidad que se va a eliminar.
        */
    public void eliminar(DatosDeUsuario pElemento)
    {
        base.eliminar(pElemento);
    }
    /**
        * \brief Función que añade una colección a la colección.
        * \param pColeccion - colección que se va a añadir.
        */
    public void añadirColeccion(ColDatosDeUsuarios pColeccion)
    {
        base.añadirColeccion(pColeccion);
    }
    /**
    * \brief Función que elimina una colección.
    * \pre La coleccion tiene que ser correcta.
    * \param pColeccion - coleccion que se va a eliminar.
    */
    public void eliminarColeccion(ColDatosDeUsuarios pColeccion)
    {
        base.eliminarColeccion(pColeccion);
    }

    #endregion

    #region Métodos de Consulta

    /**
        * \brief Obtiene el objeto DatosDeUsuario según el identificador.
        * \param pId - Identificador de un objeto DatosDeUsuario.
        * \return Devuelve el objeto DatosDeUsuario cuyos datos son los pasados por parámetros.
        */
    public virtual DatosDeUsuario getUsuarioById(ulong pId)
    {
        DatosDeUsuario datosDeUsuario = null;

        foreach (DatosDeUsuario d in this.miColeccion)
        {
            if (d.Id.Equals(pId))
            {
                datosDeUsuario = d;
                break;
            }
        }
        return datosDeUsuario;
    }
    /**
        * \brief Obtiene el objeto DatosDeUsuario según el login.
        * \param pLogin - Login de un objeto DatosDeUsuario.
        * \return Devuelve el objeto DatosDeUsuario cuyos datos son los pasados por parámetros.
        */
    public virtual DatosDeUsuario getUsuarioByLogin(string pLogin)
    {
        DatosDeUsuario datosDeUsuario = null;

        foreach (DatosDeUsuario d in this.miColeccion)
        {
            if (d.Login.Equals(pLogin))
            {
                datosDeUsuario = d;
                break;
            }
        }
        return datosDeUsuario;
    }

    public virtual ArrayList getIdsDatosDeUsuarios()
    {
        ArrayList idsUsuarios = new ArrayList();

        foreach (DatosDeUsuario datosDeUsuario in this.miColeccion)
        {
            idsUsuarios.Add(datosDeUsuario.Id);
        }
        return idsUsuarios;
    }

    #endregion

    #region Métodos adicionales

    internal override ColEncapsulados dameCopiaColeccionEncapsulados()
    {
        return new ColDatosDeUsuarios(this);
    }

    #endregion
}